/** 
 * Speichert die Liste der Verlage
 * 
 * Datei: Verlagsverwalter.java 	Autor: Simon Schindelmann 
 * Datum: 12.11.11                 	Version: 0.1
 * 
 */

package medienverwaltung;

import java.io.IOException;
import java.util.ArrayList;
import medienverwaltung.simulation.Simulation;
import basis.ea.EA;
import kommunikation.Email;
import kommunikation.Telefonnummer;
import kommunikation.Wohnsitzadresse;


public class Verlagsverwalter
{
  private static ArrayList<Verlag> verlagsListe 
  	= new ArrayList<Verlag> ();
  private EA ea;

  /**
   * Wenn das Objekt erzeugt wird, wird die Serialisierten Liste
   * geladen. (Nur bei der ersten Erzeugung des Objektes). 
   * @warning In der Methode sind Warnungen vorhanden, die nicht
   * entfernt werden koennen, da der Typ zur Laufzeit nicht
   * ueberprueft werden kann.
   */
  public Verlagsverwalter ()
  {
    if(Simulation.istVerlag () == false)
    {
      Simulation.setzeVerlag (true);
      ea = new EA ("medienverwaltung.verlag");
      if (ea.istGespeichertesXMLObjektVorhanden ())
      {
        verlagsListe = (ArrayList<Verlag>) ea.einlesenXML ();
      }
    }
  }


  /**
   * Fuegt einen Verlag der Verlagsliste hinzu.
   * @param name Name des Verlags.
   * @param adresse Adresse(n) des Verlags.
   * @param telefon Telefonnummer(n) des Verlags
   * @param email Emailadresse(n) des Veralgs.
   */
  public void verlagHinzufuegen (String name, Wohnsitzadresse adresse,
      Telefonnummer telefon, Email email)
  {
    Verlag v = new Verlag (name, adresse, telefon, email);
    verlagsListe.add (v);
  }


  /**
   * Fuegt einen Verlag der Verlagsliste hinzu.
   * @param v Uebegibt ein Objekt von typ Verlag
   */
  public void verlagHinzufuegen (Verlag v)
  {
    verlagsListe.add (v);
  }


  /**
   * Liefert eine Liste aller Verlage zurueck.
   * @return ArrayListe mit allen Verlagen.
   */
  public ArrayList<Verlag> gibVerlagsListe ()
  {
    return verlagsListe;
  }


  /**
   * Liefert den Verlag mit den entsprechenden Namen zurueck falls er
   * vorhanden ist.
   * @param Name des Verlags nach dem gesucht wird.
   * @return Verlag mit den entsprechenden Namen. Falls der Verlags 
   * nicht vorhanden ist wird null zurueck gegeben.
   */
  public Verlag gibVerlag (String name)
  {
    for (Verlag v : verlagsListe)
    {
      if (v.gibName ().toLowerCase ().equals (name.toLowerCase ()))
      {
        return v;
      }
    }
    return null;
  }


  /**
   * Prueft ob der Verlag mit den entsprechenden Namen vorhanden ist.
   * @param name Name des Verlags.
   * @return Liefert true zurueck falls der Verlag vorhanden ist
   * andernfalls false.
   */
  public boolean istVerlagVorhanden (String name)
  {
    for (Verlag v : verlagsListe)
    {
      if (v.gibName ().toLowerCase ().equals (name.toLowerCase ()))
      {
        return true;
      }
    }
    return false;
  }


  /**
   * Speichert den den Zustand der Liste.
   */
  public void zustandSpeichern ()
  {
    try 
    { 
      ea = new EA ("medienverwaltung.verlag"); 
      ea.speichernXML (verlagsListe); 
    } 
    catch (IOException e) 
    { 
      e.printStackTrace (); 
    }
  }
}
